package component;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import data.Users;
import winapi251.app.fortpolio.R;

/**
 * 메인 액티비티
 */
public class MainActivity extends Activity
{
	private static final String LOG_TAG = "WAFortPolio_component.MainActivity";

	private TextView txtProfile;
	private TextView txtCoverStory;
	private TextView txtName;

	private ImageView imgProfile;
	private ImageView imgCoverstory;

	/**
	 * 메인 액티비티가 생성될 때 호출되는 메서드
	 * @param savedInstanceState : 저장되어 있던 인스턴스 상태
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Users.getInstance().reload();

		// 뷰를 불러온다.
		txtName = (TextView) findViewById(R.id.txt_name);
		Users.getInstance().getName(new Users.DataReceiver()
		{
			@Override
			public void onDataReceived(String data, int errorCode)
			{
				if (errorCode == Users.NO_ERROR)
					txtName.setText(data);
			}
		});

		txtProfile = (TextView) findViewById(R.id.txt_profile_content);
		txtCoverStory = (TextView) findViewById(R.id.txt_coverstory_content);

		// 서버로부터 데이터를 읽어와 화면을 갱신한다.
		txtProfile.setText(Users.getInstance().getProfileContent());
		txtCoverStory.setText(Users.getInstance().getCoverstoryContent());

//		// 프로필 사진을 불러온다.
		imgProfile = (ImageView) findViewById(R.id.img_profile);
		imgCoverstory = (ImageView) findViewById(R.id.img_coverstory);
//		imgProfile = (ImageView) findViewById(R.id.img_profile);
//		Bitmap profileImage = Users.getInstance().getProfileImage();
//		if (profileImage != null)
//			imgProfile.setImageBitmap(profileImage);

		Users.getInstance().setListener(new Users.DataReceiver()
		{
			@Override
			public void onDataReceived(String data, int errorCode)
			{
				// 서버로부터 데이터를 읽어와 화면을 갱신한다.
				txtProfile.setText(Users.getInstance().getProfileContent());
				txtCoverStory.setText(Users.getInstance().getCoverstoryContent());

				// 프로필 사진을 불러온다.
				imgProfile.setImageBitmap(Users.getInstance().getProfileImage());
				imgCoverstory.setImageBitmap(Users.getInstance().getCoverstoryImage());
			}
		});
	}

	/**
	 * 메인 액티비티에서 버튼을 눌렀을 때 호출되는 메서드
	 * @param view : 눌린 버튼
	 */
	public void onClick(View view)
	{
		switch (view.getId())
		{
		case R.id.btn_profile: // 프로필 보기 영역
			// 프로필 액티비티로 이동한다.
			startActivity(new Intent(this, ProfileActivity.class));
			break;

		case R.id.btn_works: // 작업물 보기 영역
			startActivity(new Intent(this, WorksActivity.class));
			break;
		}
	}

	/**
	 * 사용자가 프로필 사진을 선택했을 때 호출되는 메서드
	 * @param requestCode : 요청 코드
	 * @param resultCode  : 결과 코드
	 * @param data        : 데이터
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
//		if (data == null)
//			return;
//
//		try
//		{
//			Uri uri = data.getData();
//			Bitmap image = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
//			imgProfile.setImageBitmap(image);
//			Users.getInstance().setProfileImage(image);
//		}
//		catch (IOException e)
//		{
//			e.printStackTrace();
//		}
	}

	/**
	 * 메뉴ᅟ를 만들어야 할 때 호출되는 메서드
	 * @param menu : 초기화할 메뉴
	 * @return : ?
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		super.onCreateOptionsMenu(menu);

		MenuInflater inflater = new MenuInflater(this);
		inflater.inflate(R.menu.main, menu);

		return true;
	}

	/**
	 * 메뉴를 선택했을 때 호출되는 메서드
	 * @param item : 선택된 메뉴
	 * @return : 처리 여부
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		switch (item.getItemId())
		{
		case R.id.menu_logout: // 로그아웃 메뉴
			// 기기에 저장된 사용자와 관련된 데이터를 모두 지우고
			Users.getInstance().removeLoginData();

			// 로그인 액티비티로 이동한다.
			finish();
			startActivity(new Intent(this, LoginActivity.class));
			break;

		default:
			return false;
		}

		return true;
	}
}